         -=( 7A69#11 )=--=( art3 )=--=( Protocolos )=--=( trycky )=-

Espero que os guste este breve documento a la introduccion al RPC para 
cualquier cosa si quereis mandarme un mail : trycky@7a69ezine.org .

RPC llamado Remote Procedure Call es un protocolo mas bien orientado para la 
implementacion de programaas para redes , EL RPC fue inventado por SUN junto
con la implementacion que este mismo usa el XDR , el RPC puede ser usado por 
medio del TCP/IP o el UDP/IP . Este protocolo fue ya algo famoso en solaris a
parte de ser los creadores de ser en donde mas faos contiene .

El RPC se distribuye en cuatro partes : Caller , Callee , CLient y Server .

EL caller se ejecuta en el cliente y es el encargado de enviar las llamadas al 
server y el callee las devuelve al client . Esto viene por que al ser para 
sistemas distribuidos se encargan de que las dos maquinas que esten  conectando
sean arquitecturas totalmente distintas aunque de esto se encarga el XDR .

EL XDR fue implementando debido a que los tipos de variables : integer , etc .
Tienen diferentes representaciones dependiendo de la arquitectura , muchas 
arquitecturas ponen los bytes de menos valor al principio y otras en cambio 
ponen los bytes de menos valor los ultimos , de ahi probiene el XDR un sistema
de intercambio de datos para que los programas de distribuicion no diesen 
errores . Por lo que el procesos de comunicacion pasa a ser que cuando el 
cliente envie algo le tenga que codificar los datos con el XDR y una vez que al
server le llega la informacion la tiene que descodificar con el XDR logico no ,
para mayor informacion del XDR y de su implementacion "/usr/include/rpc/xdr.h"

El portmap es el encargado de mapear en el puerto que esta corriendo un daemon
estos puertos no se describen como los de "/etc/services" si no que usa otro 
fichero llamado "/etc/rpc" .

Esto seria un ejemplo del contenido del "/etc/rpc" :

portmapper      100000  portmap sunrpc
rstatd          100001  rstat rstat_svc rup perfmeter
rusersd         100002  rusers
nfs             100003  nfsprog
ypserv          100004  ypprog
mountd          100005  mount showmount

Por lo que cuando un programa quiere contactar con un daemon del RPC primero 
le pregunta al portmap en que puerto esta .

Para saber en que puerto ta un programa usaremos :

real@lepton:~ > rpcinfo -p localhost
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    954  status
    100024    1   tcp    956  status
    100003    2   udp   2049  nfs
    100021    1   udp   1122  nlockmgr
    100021    3   udp   1122  nlockmgr

Esto seria usando rpcinfo otra forma es usando algun scaner por ejemp el nmap.

real@lepton:~ > nmap -sR -sT localhost

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1537 ports scanned but not shown below are in state: closed)
Port       State       Service (RPC)
21/tcp     open        ftp                     
22/tcp     open        ssh                     
80/tcp     open        http                    
111/tcp    open        sunrpc (rpcbind V2)     
956/tcp    open        (status V1)             

Notas :

Si estais con Debian el paquete del RPC es netkit-rpc donde incluye el rpcinfo 
, rpcgen , etc .

Referencias :

man rpcinfo

Bueno lamento que este documento haya salido tan malo pero es que como siempre
falta de tiempo en fin para el 7a69#12 publicaremos los sources que se suponian
que irian en este numero ; trycky@7a69ezine.org .

-=(EOF)=-

 




